package top.lingkang.finalsessionsolon.test01;

import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.core.handle.Context;
import top.lingkang.finalsession.FinalSessionConfig;
import top.lingkang.finalsession.core.FinalSessionHandler;
import top.lingkang.finalsession.core.IdGenerate;

import java.util.UUID;

/**
 * @author lingkang
 * @create by 2024/5/10 10:10
 */
@Configuration
public class WebSessionConfig {
    @Bean
    public FinalSessionConfig finalSessionConfig() {
        FinalSessionConfig config = new FinalSessionConfig();
        // 对项目进行配置
        // 设置cookie的名称，默认session id存储在cookie中
        config.setSessionName("token");
        // 自定义session存活时长 单位：毫秒
        config.setMaxValidTime(19951995L);
        // 配置id生成规则
        config.setIdGenerate(new IdGenerate<Context>() {
            @Override
            public String generateId(Context context, FinalSessionConfig config) {
                // 自定义id的值，可以根据不同id前缀访问不同redis集群，从而实现集群无限扩展
                return UUID.randomUUID().toString();
            }
        });
        return config;
    }

    // @Bean
    public FinalSessionConfig sessionConfig() {
        FinalSessionConfig config = new FinalSessionConfig();
        // 自定义ID的获取、设置方式
        config.setSessionHandler(new FinalSessionHandler<Context, Context>() {
            @Override
            public String getSessionId(Context context, String name) {
                // 获取会话id的方式，可以通过 请求头、请求参数、cookie中获取
                // 从cookie中
                // 从参数中
                // 从请求头中
                return context.header("token");// 这只是一个demo
            }

            @Override
            public void setSessionId(Context context, String name, String value) {
                // 前后端分离，可以不设置session id到cookie
                context.cookieSet(name, value);
            }
        });
        return config;
    }
}
